\documentclass{report}
\usepackage[UTF8]{ctex}
\usepackage{amsthm,amsmath,amssymb}
\usepackage{mathrsfs} %导入花体数学字母
\usepackage{caption}
\usepackage{graphicx, subfig} %插入图片
\usepackage{float} %浮动宏包
\usepackage{listings} %插入代码
\usepackage{xcolor} %语法高亮
\usepackage{fontspec} %字体包
\usepackage{diagbox} % 斜线表头
\usepackage{geometry} %设置页面
\usepackage{enumerate}
\usepackage[colorlinks,linkcolor=blue]{hyperref} %超链接
\usepackage{marginnote} % 在正文旁边添加注释文字

\setlength{\marginparwidth}{0.6in} %页边空白处设定宽度0.6英寸
\let\oldmarginpar\marginpar
\renewcommand\marginpar[1]{\-\oldmarginpar[\raggedleft\footnotesize\color{red} #1]%
	{\raggedright\footnotesize\color{red} #1}} % 注释文字用红色footnote 大小
\marginparsep = 10pt %与正文间隔10pt

% \marginpar{需要添加的内容}
% 显示或隐藏页边注释，只要在文件头添加下面的语句，把它注释掉后又显示页边内容
% \renewcommand{\marginpar}[2][]{}

\geometry{a4paper,left=2cm,right=2cm,top=2cm,bottom=2cm}

\usepackage{fancyhdr}
\usepackage{lipsum}
\pagestyle{fancy}

\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{\arabic{section}.\ #1}}
\lhead[\thepage]{\leftmark} 
\rhead[\nouppercase{\rightmark}]{\thepage}

\lstset{
	columns=fixed,       
	numbers=left,                                        % 在左侧显示行号
	numberstyle=\color{black},                       % 设定行号格式
	basicstyle=\fontspec{Consolas}\small\color[RGB]{212,212,212},
	tabsize=4,
	frame=single,                                        % 背景边框
	rulecolor=\color[rgb]{0,0,0},                  % 边框颜色
	extendedchars=false,                                 % 解决换页问题
	backgroundcolor=\color[RGB]{30,30,30},            % 设定背景颜色
	keywordstyle=\color[RGB]{156,220,254},                 % 设定关键字颜色
	identifierstyle=\color[RGB]{86,156,214},                       % 普通标识符颜色
	commentstyle=\it\color[RGB]{106,153,73},                % 设置代码注释的格式
	stringstyle=\rmfamily\slshape\color[RGB]{206,145,91},   % 设置字符串格式
	showstringspaces=false,                              % 不显示字符串中的空格
	language=c++,                                        % 设置语言
	escapeinside=``,                                     % 逃逸字符
	xleftmargin=1em,                                     % 边距设置
	xrightmargin=1em, 
	aboveskip=1em
}

\title{{\Huge Homework3\\ 程序报告}}
\author{{\LARGE 3190105815 信息与计算科学\ 行一凡}}
\date{{\LARGE \today}}

\begin{document}
	\maketitle
	\section*{代码说明}
	\subsection*{项目框架}
	项目总共包含五个文件夹 include、src、pictures、octave、res;
	\begin{itemize}
		\item include 文件夹中 Config.h 包含所需导入的系统头文件； Interp.h 包含多项式类和相关结构的声明和实现； Spline.h 包含样条类的声明和实现
		\item src 文件夹中以题号命名的 cpp 文件是题目所需函数实现； main.cpp 仅包含 main 函数
		\item pictures 文件夹包含所有题目绘制的图像
		\item octave 文件夹包含绘图所需的脚本文件
		\item res 文件夹包含所有输出数据
	\end{itemize}
	此外，主目录中还包含用于编译的 Makefile ；以及报告文件 report.tex 。
	
	\subsection*{项目运行}
	在命令行中输入 make ID=NAME 命令，其中 NAME 为题号 (B/C/D/E/F) ，编译指定题号的 cpp 文件，在主目录下生成可执行文件；输入 make doc 命令编译 report.tex 生成 report.pdf 文件； make clean 命令清除所有生成的文件。
	
	\section*{Exercise B}
	\begin{figure}[!htb]			% 嵌套figure环境
		\centering					% 图片居中
		\includegraphics[width=0.4\textwidth]{pictures/B_complete.png}
	\end{figure}
	Complete Spline 的插值结果如上图所示，随着 N 的增加，所得到的曲线快速接近原曲线，图中红色的原曲线已被插值曲线覆盖；通过改变 N 的值得到的在区间中点的误差向量的收敛趋势图如下
	
	\begin{figure}[!htb]			% 嵌套figure环境
		\centering					% 图片居中
		\includegraphics[width=0.4\textwidth]{pictures/c_err.png}
	\end{figure}

	同样地， notAknot Spline 的插值结果和收敛趋势如下图所示
	\begin{figure}[!htb]			% 嵌套figure环境
		\centering					% 图片居中
		\includegraphics[width=0.4\textwidth]{pictures/B_notAknot.png}
	\end{figure}

	\begin{figure}[!htb]			% 嵌套figure环境
		\centering					% 图片居中
		\includegraphics[width=0.4\textwidth]{pictures/n_err.png}
	\end{figure}

	\section*{Exercise C}
	下图依次为二次和三次基数 B 样条的插值结果
	\begin{figure}[!htb]			% 嵌套figure环境
		\centering					% 图片居中
		\includegraphics[width=0.4\textwidth]{pictures/C_B2.png}
	\end{figure}
	
	\begin{figure}[!htb]			% 嵌套figure环境
		\centering					% 图片居中
		\includegraphics[width=0.4\textwidth]{pictures/C_B3.png}
	\end{figure}
	
	\section*{Exercise D}
	通过代入 C 中的样条曲线得到的误差值为
	
	\begin{center}
		\begin{tabular}{|c|c|c|c|c|c|c|c|}% 通过添加 | 来表示是否需要绘制竖线
			\hline  % 在表格最上方绘制横线
			\diagbox{Type}{Error}{Site}& -3.5 & -3 & -0.5 & 0 & 0.5 & 3 & 3.5\\ %添加斜线表头
			\hline
			Quadratic & 1.38778e-17 & 0.00141838 & 3.44169e-15 & 0.120238 & 4.32987e-15 & 0.00141838 & 1.80411e-16\\ 
			\hline
			Cubic & 0.000669568 & 3.33067e-16 & 0.0205289 & 5.68434e-14 & 0.0205289 & 2.53964e-14 & 0.000669568\\
			\hline % 在表格最下方绘制横线
		\end{tabular}
	\end{center}

	在整数点，二次基数 B 样条的误差明显大于三次基数 B 样条，三次基数 B 样条误差接近机器精度；而在整数区间中点则相反，二次基数 B 样条的误差明显小于三次基数 B 样条，二次基数 B 样条误差接近机器精度。这可能是由于前者在整数区间中点插值，而后者在整数端点插值。\\ 
	\indent 根据表格数据，平均意义下三次基数 B 样条更加精确。
	
	\section*{Exercise E}
	$ N = 10,40,160 $的样条曲线分别为蓝、红、绿，使用无结样条进行插值
	
	\begin{figure}[!htb]			% 嵌套figure环境
		\centering					% 图片居中
		\includegraphics[width=\textwidth]{pictures/E.png}
	\end{figure}

	\section*{Exercise F}
	\begin{figure}[H]			% 嵌套figure环境
		\includegraphics[width=\textwidth]{pictures/F.png}
	\end{figure}
			
\end{document}